package Dao.PostgreSql;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import Dao.GenericDao;
import Entity.Situacao;
import Interface.InterfaceDao;

public class SituacaoPostgreSqlDao  extends GenericDao implements InterfaceDao {
	
	@Override
    public List<Object> findAll() {
        List<Object> lista = new ArrayList<Object>();
        try {
            //cria o objeto de conexao
            Connection conn = conexao();

            // monta o sql de insert
            String query = "select id, descricao from Situacao";

            // cria os parametros a serem passados no insert
            PreparedStatement preparedStmt = conn.prepareStatement(query);

            // executa o sql
            ResultSet q = preparedStmt.executeQuery();

            Situacao f;
            while (q.next()) {
                f = new Situacao();
                f.setId(q.getInt("id"));
                f.setDescricao(q.getString("descricao"));
                
                lista.add(f);
            }

            conn.close();
        } catch (Exception e) {
            System.err.println("Ocorreu um erro ao consultar todos!");
            System.err.println(e.getMessage());
        }
        return lista;
    }

    @Override
    public void insert(Object obj) {
        try {
            Situacao objF = (Situacao)obj;
            //cria o objeto de conexao
            Connection conn = conexao();

            // monta o sql de insert
            String query = " insert into situacao values (default, ?)";

            // cria os parametros a serem passados no insert
            PreparedStatement preparedStmt = conn.prepareStatement(query);
            preparedStmt.setString(1, objF.getDescricao());

            // executa o sql
            preparedStmt.execute();

            conn.close();
        } catch (Exception e) {
            System.err.println("Ocorreu um erro ao inserir!");
            System.err.println(e.getMessage());
        }
    }

    @Override
    public void update(Object obj) {
        try {
            Situacao objF = (Situacao)obj;
            //cria o objeto de conexao
            Connection conn = conexao();

            // monta o sql de insert
            String query = " update Situacao set descricao = ? where id = ?";

            // cria os parametros a serem passados no insert
            PreparedStatement preparedStmt = conn.prepareStatement(query);
            preparedStmt.setString(1, objF.getDescricao());
            preparedStmt.setInt(2, objF.getId());

            // executa o sql
            preparedStmt.execute();

            conn.close();
        } catch (Exception e) {
            System.err.println("Ocorreu um erro ao alterar!");
            System.err.println(e.getMessage());
        }
    }

    @Override
    public void delete(int id) {
        try {
            //cria o objeto de conexao
            Connection conn = conexao();

            // monta o sql de insert
            String query = " delete from Situacao where id = ?";

            // cria os parametros a serem passados no insert
            PreparedStatement preparedStmt = conn.prepareStatement(query);
            preparedStmt.setInt(1, id);

            // executa o sql
            preparedStmt.execute();

            conn.close();
        } catch (Exception e) {
            System.err.println("Ocorreu um erro ao excluir!");
            System.err.println(e.getMessage());
        }
    }

	@Override
	public List<Object> findAllById(int id) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Object> findVencimentos(int dias) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void updateAviso(int aviso, int id) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public List<Object> findVencimentosMes() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Object> findClienteAviso() {
		// TODO Auto-generated method stub
		return null;
	}
}
